package qldc.pm.tiensu.service.persistence;

import com.liferay.portal.kernel.cache.CacheRegistryUtil;
import com.liferay.portal.kernel.dao.orm.EntityCacheUtil;
import com.liferay.portal.kernel.dao.orm.FinderCacheUtil;
import com.liferay.portal.kernel.dao.orm.FinderPath;
import com.liferay.portal.kernel.dao.orm.Query;
import com.liferay.portal.kernel.dao.orm.QueryPos;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.InstanceFactory;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.UnmodifiableList;
import com.liferay.portal.model.CacheModel;
import com.liferay.portal.model.ModelListener;
import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;

import qldc.pm.tiensu.NoSuchCongViecBanGiaoException;
import qldc.pm.tiensu.model.CongViecBanGiao;
import qldc.pm.tiensu.model.impl.CongViecBanGiaoImpl;
import qldc.pm.tiensu.model.impl.CongViecBanGiaoModelImpl;
import qldc.pm.tiensu.service.persistence.CongViecBanGiaoPersistence;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * The persistence implementation for the cong viec ban giao service.
 *
 * <p>
 * Caching information and settings can be found in <code>portal.properties</code>
 * </p>
 *
 * @author Brian Wing Shun Chan
 * @see CongViecBanGiaoPersistence
 * @see CongViecBanGiaoUtil
 * @generated
 */
public class CongViecBanGiaoPersistenceImpl extends BasePersistenceImpl<CongViecBanGiao>
    implements CongViecBanGiaoPersistence {
    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never modify or reference this class directly. Always use {@link CongViecBanGiaoUtil} to access the cong viec ban giao persistence. Modify <code>service.xml</code> and rerun ServiceBuilder to regenerate this class.
     */
    public static final String FINDER_CLASS_NAME_ENTITY = CongViecBanGiaoImpl.class.getName();
    public static final String FINDER_CLASS_NAME_LIST_WITH_PAGINATION = FINDER_CLASS_NAME_ENTITY +
        ".List1";
    public static final String FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION = FINDER_CLASS_NAME_ENTITY +
        ".List2";
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_ALL = new FinderPath(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoModelImpl.FINDER_CACHE_ENABLED,
            CongViecBanGiaoImpl.class, FINDER_CLASS_NAME_LIST_WITH_PAGINATION,
            "findAll", new String[0]);
    public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL = new FinderPath(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoModelImpl.FINDER_CACHE_ENABLED,
            CongViecBanGiaoImpl.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "findAll", new String[0]);
    public static final FinderPath FINDER_PATH_COUNT_ALL = new FinderPath(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "countAll", new String[0]);
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_BY_BIENBANBANGIAOHOSOID =
        new FinderPath(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoModelImpl.FINDER_CACHE_ENABLED,
            CongViecBanGiaoImpl.class, FINDER_CLASS_NAME_LIST_WITH_PAGINATION,
            "findByBienBanBanGiaoHoSoId",
            new String[] {
                Long.class.getName(),
                
            Integer.class.getName(), Integer.class.getName(),
                OrderByComparator.class.getName()
            });
    public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_BIENBANBANGIAOHOSOID =
        new FinderPath(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoModelImpl.FINDER_CACHE_ENABLED,
            CongViecBanGiaoImpl.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,
            "findByBienBanBanGiaoHoSoId",
            new String[] { Long.class.getName() },
            CongViecBanGiaoModelImpl.BIENBANBANGIAOHOSOID_COLUMN_BITMASK);
    public static final FinderPath FINDER_PATH_COUNT_BY_BIENBANBANGIAOHOSOID = new FinderPath(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,
            "countByBienBanBanGiaoHoSoId", new String[] { Long.class.getName() });
    private static final String _FINDER_COLUMN_BIENBANBANGIAOHOSOID_BIENBANBANGIAOHOSOID_2 =
        "congViecBanGiao.bienBanBanGiaoHoSoId = ?";
    private static final String _SQL_SELECT_CONGVIECBANGIAO = "SELECT congViecBanGiao FROM CongViecBanGiao congViecBanGiao";
    private static final String _SQL_SELECT_CONGVIECBANGIAO_WHERE = "SELECT congViecBanGiao FROM CongViecBanGiao congViecBanGiao WHERE ";
    private static final String _SQL_COUNT_CONGVIECBANGIAO = "SELECT COUNT(congViecBanGiao) FROM CongViecBanGiao congViecBanGiao";
    private static final String _SQL_COUNT_CONGVIECBANGIAO_WHERE = "SELECT COUNT(congViecBanGiao) FROM CongViecBanGiao congViecBanGiao WHERE ";
    private static final String _ORDER_BY_ENTITY_ALIAS = "congViecBanGiao.";
    private static final String _NO_SUCH_ENTITY_WITH_PRIMARY_KEY = "No CongViecBanGiao exists with the primary key ";
    private static final String _NO_SUCH_ENTITY_WITH_KEY = "No CongViecBanGiao exists with the key {";
    private static final boolean _HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE = GetterUtil.getBoolean(PropsUtil.get(
                PropsKeys.HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE));
    private static Log _log = LogFactoryUtil.getLog(CongViecBanGiaoPersistenceImpl.class);
    private static CongViecBanGiao _nullCongViecBanGiao = new CongViecBanGiaoImpl() {
            @Override
            public Object clone() {
                return this;
            }

            @Override
            public CacheModel<CongViecBanGiao> toCacheModel() {
                return _nullCongViecBanGiaoCacheModel;
            }
        };

    private static CacheModel<CongViecBanGiao> _nullCongViecBanGiaoCacheModel = new CacheModel<CongViecBanGiao>() {
            @Override
            public CongViecBanGiao toEntityModel() {
                return _nullCongViecBanGiao;
            }
        };

    public CongViecBanGiaoPersistenceImpl() {
        setModelClass(CongViecBanGiao.class);
    }

    /**
     * Returns all the cong viec ban giaos where bienBanBanGiaoHoSoId = &#63;.
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @return the matching cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<CongViecBanGiao> findByBienBanBanGiaoHoSoId(
        long bienBanBanGiaoHoSoId) throws SystemException {
        return findByBienBanBanGiaoHoSoId(bienBanBanGiaoHoSoId,
            QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the cong viec ban giaos where bienBanBanGiaoHoSoId = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link qldc.pm.tiensu.model.impl.CongViecBanGiaoModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @param start the lower bound of the range of cong viec ban giaos
     * @param end the upper bound of the range of cong viec ban giaos (not inclusive)
     * @return the range of matching cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<CongViecBanGiao> findByBienBanBanGiaoHoSoId(
        long bienBanBanGiaoHoSoId, int start, int end)
        throws SystemException {
        return findByBienBanBanGiaoHoSoId(bienBanBanGiaoHoSoId, start, end, null);
    }

    /**
     * Returns an ordered range of all the cong viec ban giaos where bienBanBanGiaoHoSoId = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link qldc.pm.tiensu.model.impl.CongViecBanGiaoModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @param start the lower bound of the range of cong viec ban giaos
     * @param end the upper bound of the range of cong viec ban giaos (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of matching cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<CongViecBanGiao> findByBienBanBanGiaoHoSoId(
        long bienBanBanGiaoHoSoId, int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
                (orderByComparator == null)) {
            pagination = false;
            finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_BIENBANBANGIAOHOSOID;
            finderArgs = new Object[] { bienBanBanGiaoHoSoId };
        } else {
            finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_BIENBANBANGIAOHOSOID;
            finderArgs = new Object[] {
                    bienBanBanGiaoHoSoId,
                    
                    start, end, orderByComparator
                };
        }

        List<CongViecBanGiao> list = (List<CongViecBanGiao>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if ((list != null) && !list.isEmpty()) {
            for (CongViecBanGiao congViecBanGiao : list) {
                if ((bienBanBanGiaoHoSoId != congViecBanGiao.getBienBanBanGiaoHoSoId())) {
                    list = null;

                    break;
                }
            }
        }

        if (list == null) {
            StringBundler query = null;

            if (orderByComparator != null) {
                query = new StringBundler(3 +
                        (orderByComparator.getOrderByFields().length * 3));
            } else {
                query = new StringBundler(3);
            }

            query.append(_SQL_SELECT_CONGVIECBANGIAO_WHERE);

            query.append(_FINDER_COLUMN_BIENBANBANGIAOHOSOID_BIENBANBANGIAOHOSOID_2);

            if (orderByComparator != null) {
                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);
            } else
             if (pagination) {
                query.append(CongViecBanGiaoModelImpl.ORDER_BY_JPQL);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                qPos.add(bienBanBanGiaoHoSoId);

                if (!pagination) {
                    list = (List<CongViecBanGiao>) QueryUtil.list(q,
                            getDialect(), start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<CongViecBanGiao>(list);
                } else {
                    list = (List<CongViecBanGiao>) QueryUtil.list(q,
                            getDialect(), start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Returns the first cong viec ban giao in the ordered set where bienBanBanGiaoHoSoId = &#63;.
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching cong viec ban giao
     * @throws qldc.pm.tiensu.NoSuchCongViecBanGiaoException if a matching cong viec ban giao could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao findByBienBanBanGiaoHoSoId_First(
        long bienBanBanGiaoHoSoId, OrderByComparator orderByComparator)
        throws NoSuchCongViecBanGiaoException, SystemException {
        CongViecBanGiao congViecBanGiao = fetchByBienBanBanGiaoHoSoId_First(bienBanBanGiaoHoSoId,
                orderByComparator);

        if (congViecBanGiao != null) {
            return congViecBanGiao;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("bienBanBanGiaoHoSoId=");
        msg.append(bienBanBanGiaoHoSoId);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchCongViecBanGiaoException(msg.toString());
    }

    /**
     * Returns the first cong viec ban giao in the ordered set where bienBanBanGiaoHoSoId = &#63;.
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching cong viec ban giao, or <code>null</code> if a matching cong viec ban giao could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao fetchByBienBanBanGiaoHoSoId_First(
        long bienBanBanGiaoHoSoId, OrderByComparator orderByComparator)
        throws SystemException {
        List<CongViecBanGiao> list = findByBienBanBanGiaoHoSoId(bienBanBanGiaoHoSoId,
                0, 1, orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the last cong viec ban giao in the ordered set where bienBanBanGiaoHoSoId = &#63;.
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching cong viec ban giao
     * @throws qldc.pm.tiensu.NoSuchCongViecBanGiaoException if a matching cong viec ban giao could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao findByBienBanBanGiaoHoSoId_Last(
        long bienBanBanGiaoHoSoId, OrderByComparator orderByComparator)
        throws NoSuchCongViecBanGiaoException, SystemException {
        CongViecBanGiao congViecBanGiao = fetchByBienBanBanGiaoHoSoId_Last(bienBanBanGiaoHoSoId,
                orderByComparator);

        if (congViecBanGiao != null) {
            return congViecBanGiao;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("bienBanBanGiaoHoSoId=");
        msg.append(bienBanBanGiaoHoSoId);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchCongViecBanGiaoException(msg.toString());
    }

    /**
     * Returns the last cong viec ban giao in the ordered set where bienBanBanGiaoHoSoId = &#63;.
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching cong viec ban giao, or <code>null</code> if a matching cong viec ban giao could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao fetchByBienBanBanGiaoHoSoId_Last(
        long bienBanBanGiaoHoSoId, OrderByComparator orderByComparator)
        throws SystemException {
        int count = countByBienBanBanGiaoHoSoId(bienBanBanGiaoHoSoId);

        if (count == 0) {
            return null;
        }

        List<CongViecBanGiao> list = findByBienBanBanGiaoHoSoId(bienBanBanGiaoHoSoId,
                count - 1, count, orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the cong viec ban giaos before and after the current cong viec ban giao in the ordered set where bienBanBanGiaoHoSoId = &#63;.
     *
     * @param congViecBanGiaoId the primary key of the current cong viec ban giao
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the previous, current, and next cong viec ban giao
     * @throws qldc.pm.tiensu.NoSuchCongViecBanGiaoException if a cong viec ban giao with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao[] findByBienBanBanGiaoHoSoId_PrevAndNext(
        long congViecBanGiaoId, long bienBanBanGiaoHoSoId,
        OrderByComparator orderByComparator)
        throws NoSuchCongViecBanGiaoException, SystemException {
        CongViecBanGiao congViecBanGiao = findByPrimaryKey(congViecBanGiaoId);

        Session session = null;

        try {
            session = openSession();

            CongViecBanGiao[] array = new CongViecBanGiaoImpl[3];

            array[0] = getByBienBanBanGiaoHoSoId_PrevAndNext(session,
                    congViecBanGiao, bienBanBanGiaoHoSoId, orderByComparator,
                    true);

            array[1] = congViecBanGiao;

            array[2] = getByBienBanBanGiaoHoSoId_PrevAndNext(session,
                    congViecBanGiao, bienBanBanGiaoHoSoId, orderByComparator,
                    false);

            return array;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    protected CongViecBanGiao getByBienBanBanGiaoHoSoId_PrevAndNext(
        Session session, CongViecBanGiao congViecBanGiao,
        long bienBanBanGiaoHoSoId, OrderByComparator orderByComparator,
        boolean previous) {
        StringBundler query = null;

        if (orderByComparator != null) {
            query = new StringBundler(6 +
                    (orderByComparator.getOrderByFields().length * 6));
        } else {
            query = new StringBundler(3);
        }

        query.append(_SQL_SELECT_CONGVIECBANGIAO_WHERE);

        query.append(_FINDER_COLUMN_BIENBANBANGIAOHOSOID_BIENBANBANGIAOHOSOID_2);

        if (orderByComparator != null) {
            String[] orderByConditionFields = orderByComparator.getOrderByConditionFields();

            if (orderByConditionFields.length > 0) {
                query.append(WHERE_AND);
            }

            for (int i = 0; i < orderByConditionFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByConditionFields[i]);

                if ((i + 1) < orderByConditionFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN_HAS_NEXT);
                    } else {
                        query.append(WHERE_LESSER_THAN_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN);
                    } else {
                        query.append(WHERE_LESSER_THAN);
                    }
                }
            }

            query.append(ORDER_BY_CLAUSE);

            String[] orderByFields = orderByComparator.getOrderByFields();

            for (int i = 0; i < orderByFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByFields[i]);

                if ((i + 1) < orderByFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC_HAS_NEXT);
                    } else {
                        query.append(ORDER_BY_DESC_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC);
                    } else {
                        query.append(ORDER_BY_DESC);
                    }
                }
            }
        } else {
            query.append(CongViecBanGiaoModelImpl.ORDER_BY_JPQL);
        }

        String sql = query.toString();

        Query q = session.createQuery(sql);

        q.setFirstResult(0);
        q.setMaxResults(2);

        QueryPos qPos = QueryPos.getInstance(q);

        qPos.add(bienBanBanGiaoHoSoId);

        if (orderByComparator != null) {
            Object[] values = orderByComparator.getOrderByConditionValues(congViecBanGiao);

            for (Object value : values) {
                qPos.add(value);
            }
        }

        List<CongViecBanGiao> list = q.list();

        if (list.size() == 2) {
            return list.get(1);
        } else {
            return null;
        }
    }

    /**
     * Removes all the cong viec ban giaos where bienBanBanGiaoHoSoId = &#63; from the database.
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeByBienBanBanGiaoHoSoId(long bienBanBanGiaoHoSoId)
        throws SystemException {
        for (CongViecBanGiao congViecBanGiao : findByBienBanBanGiaoHoSoId(
                bienBanBanGiaoHoSoId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null)) {
            remove(congViecBanGiao);
        }
    }

    /**
     * Returns the number of cong viec ban giaos where bienBanBanGiaoHoSoId = &#63;.
     *
     * @param bienBanBanGiaoHoSoId the bien ban ban giao ho so ID
     * @return the number of matching cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countByBienBanBanGiaoHoSoId(long bienBanBanGiaoHoSoId)
        throws SystemException {
        FinderPath finderPath = FINDER_PATH_COUNT_BY_BIENBANBANGIAOHOSOID;

        Object[] finderArgs = new Object[] { bienBanBanGiaoHoSoId };

        Long count = (Long) FinderCacheUtil.getResult(finderPath, finderArgs,
                this);

        if (count == null) {
            StringBundler query = new StringBundler(2);

            query.append(_SQL_COUNT_CONGVIECBANGIAO_WHERE);

            query.append(_FINDER_COLUMN_BIENBANBANGIAOHOSOID_BIENBANBANGIAOHOSOID_2);

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                qPos.add(bienBanBanGiaoHoSoId);

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(finderPath, finderArgs, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    /**
     * Caches the cong viec ban giao in the entity cache if it is enabled.
     *
     * @param congViecBanGiao the cong viec ban giao
     */
    @Override
    public void cacheResult(CongViecBanGiao congViecBanGiao) {
        EntityCacheUtil.putResult(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoImpl.class, congViecBanGiao.getPrimaryKey(),
            congViecBanGiao);

        congViecBanGiao.resetOriginalValues();
    }

    /**
     * Caches the cong viec ban giaos in the entity cache if it is enabled.
     *
     * @param congViecBanGiaos the cong viec ban giaos
     */
    @Override
    public void cacheResult(List<CongViecBanGiao> congViecBanGiaos) {
        for (CongViecBanGiao congViecBanGiao : congViecBanGiaos) {
            if (EntityCacheUtil.getResult(
                        CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
                        CongViecBanGiaoImpl.class,
                        congViecBanGiao.getPrimaryKey()) == null) {
                cacheResult(congViecBanGiao);
            } else {
                congViecBanGiao.resetOriginalValues();
            }
        }
    }

    /**
     * Clears the cache for all cong viec ban giaos.
     *
     * <p>
     * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
     * </p>
     */
    @Override
    public void clearCache() {
        if (_HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE) {
            CacheRegistryUtil.clear(CongViecBanGiaoImpl.class.getName());
        }

        EntityCacheUtil.clearCache(CongViecBanGiaoImpl.class.getName());

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }

    /**
     * Clears the cache for the cong viec ban giao.
     *
     * <p>
     * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
     * </p>
     */
    @Override
    public void clearCache(CongViecBanGiao congViecBanGiao) {
        EntityCacheUtil.removeResult(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoImpl.class, congViecBanGiao.getPrimaryKey());

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }

    @Override
    public void clearCache(List<CongViecBanGiao> congViecBanGiaos) {
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);

        for (CongViecBanGiao congViecBanGiao : congViecBanGiaos) {
            EntityCacheUtil.removeResult(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
                CongViecBanGiaoImpl.class, congViecBanGiao.getPrimaryKey());
        }
    }

    /**
     * Creates a new cong viec ban giao with the primary key. Does not add the cong viec ban giao to the database.
     *
     * @param congViecBanGiaoId the primary key for the new cong viec ban giao
     * @return the new cong viec ban giao
     */
    @Override
    public CongViecBanGiao create(long congViecBanGiaoId) {
        CongViecBanGiao congViecBanGiao = new CongViecBanGiaoImpl();

        congViecBanGiao.setNew(true);
        congViecBanGiao.setPrimaryKey(congViecBanGiaoId);

        return congViecBanGiao;
    }

    /**
     * Removes the cong viec ban giao with the primary key from the database. Also notifies the appropriate model listeners.
     *
     * @param congViecBanGiaoId the primary key of the cong viec ban giao
     * @return the cong viec ban giao that was removed
     * @throws qldc.pm.tiensu.NoSuchCongViecBanGiaoException if a cong viec ban giao with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao remove(long congViecBanGiaoId)
        throws NoSuchCongViecBanGiaoException, SystemException {
        return remove((Serializable) congViecBanGiaoId);
    }

    /**
     * Removes the cong viec ban giao with the primary key from the database. Also notifies the appropriate model listeners.
     *
     * @param primaryKey the primary key of the cong viec ban giao
     * @return the cong viec ban giao that was removed
     * @throws qldc.pm.tiensu.NoSuchCongViecBanGiaoException if a cong viec ban giao with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao remove(Serializable primaryKey)
        throws NoSuchCongViecBanGiaoException, SystemException {
        Session session = null;

        try {
            session = openSession();

            CongViecBanGiao congViecBanGiao = (CongViecBanGiao) session.get(CongViecBanGiaoImpl.class,
                    primaryKey);

            if (congViecBanGiao == null) {
                if (_log.isWarnEnabled()) {
                    _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);
                }

                throw new NoSuchCongViecBanGiaoException(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY +
                    primaryKey);
            }

            return remove(congViecBanGiao);
        } catch (NoSuchCongViecBanGiaoException nsee) {
            throw nsee;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    @Override
    protected CongViecBanGiao removeImpl(CongViecBanGiao congViecBanGiao)
        throws SystemException {
        congViecBanGiao = toUnwrappedModel(congViecBanGiao);

        Session session = null;

        try {
            session = openSession();

            if (!session.contains(congViecBanGiao)) {
                congViecBanGiao = (CongViecBanGiao) session.get(CongViecBanGiaoImpl.class,
                        congViecBanGiao.getPrimaryKeyObj());
            }

            if (congViecBanGiao != null) {
                session.delete(congViecBanGiao);
            }
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }

        if (congViecBanGiao != null) {
            clearCache(congViecBanGiao);
        }

        return congViecBanGiao;
    }

    @Override
    public CongViecBanGiao updateImpl(
        qldc.pm.tiensu.model.CongViecBanGiao congViecBanGiao)
        throws SystemException {
        congViecBanGiao = toUnwrappedModel(congViecBanGiao);

        boolean isNew = congViecBanGiao.isNew();

        CongViecBanGiaoModelImpl congViecBanGiaoModelImpl = (CongViecBanGiaoModelImpl) congViecBanGiao;

        Session session = null;

        try {
            session = openSession();

            if (congViecBanGiao.isNew()) {
                session.save(congViecBanGiao);

                congViecBanGiao.setNew(false);
            } else {
                session.merge(congViecBanGiao);
            }
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);

        if (isNew || !CongViecBanGiaoModelImpl.COLUMN_BITMASK_ENABLED) {
            FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
        }
        else {
            if ((congViecBanGiaoModelImpl.getColumnBitmask() &
                    FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_BIENBANBANGIAOHOSOID.getColumnBitmask()) != 0) {
                Object[] args = new Object[] {
                        congViecBanGiaoModelImpl.getOriginalBienBanBanGiaoHoSoId()
                    };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_BIENBANBANGIAOHOSOID,
                    args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_BIENBANBANGIAOHOSOID,
                    args);

                args = new Object[] {
                        congViecBanGiaoModelImpl.getBienBanBanGiaoHoSoId()
                    };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_BIENBANBANGIAOHOSOID,
                    args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_BIENBANBANGIAOHOSOID,
                    args);
            }
        }

        EntityCacheUtil.putResult(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
            CongViecBanGiaoImpl.class, congViecBanGiao.getPrimaryKey(),
            congViecBanGiao);

        return congViecBanGiao;
    }

    protected CongViecBanGiao toUnwrappedModel(CongViecBanGiao congViecBanGiao) {
        if (congViecBanGiao instanceof CongViecBanGiaoImpl) {
            return congViecBanGiao;
        }

        CongViecBanGiaoImpl congViecBanGiaoImpl = new CongViecBanGiaoImpl();

        congViecBanGiaoImpl.setNew(congViecBanGiao.isNew());
        congViecBanGiaoImpl.setPrimaryKey(congViecBanGiao.getPrimaryKey());

        congViecBanGiaoImpl.setCongViecBanGiaoId(congViecBanGiao.getCongViecBanGiaoId());
        congViecBanGiaoImpl.setBienBanBanGiaoHoSoId(congViecBanGiao.getBienBanBanGiaoHoSoId());
        congViecBanGiaoImpl.setTenCongViec(congViecBanGiao.getTenCongViec());
        congViecBanGiaoImpl.setTienDoThucHien(congViecBanGiao.getTienDoThucHien());
        congViecBanGiaoImpl.setChuThich(congViecBanGiao.getChuThich());

        return congViecBanGiaoImpl;
    }

    /**
     * Returns the cong viec ban giao with the primary key or throws a {@link com.liferay.portal.NoSuchModelException} if it could not be found.
     *
     * @param primaryKey the primary key of the cong viec ban giao
     * @return the cong viec ban giao
     * @throws qldc.pm.tiensu.NoSuchCongViecBanGiaoException if a cong viec ban giao with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao findByPrimaryKey(Serializable primaryKey)
        throws NoSuchCongViecBanGiaoException, SystemException {
        CongViecBanGiao congViecBanGiao = fetchByPrimaryKey(primaryKey);

        if (congViecBanGiao == null) {
            if (_log.isWarnEnabled()) {
                _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);
            }

            throw new NoSuchCongViecBanGiaoException(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY +
                primaryKey);
        }

        return congViecBanGiao;
    }

    /**
     * Returns the cong viec ban giao with the primary key or throws a {@link qldc.pm.tiensu.NoSuchCongViecBanGiaoException} if it could not be found.
     *
     * @param congViecBanGiaoId the primary key of the cong viec ban giao
     * @return the cong viec ban giao
     * @throws qldc.pm.tiensu.NoSuchCongViecBanGiaoException if a cong viec ban giao with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao findByPrimaryKey(long congViecBanGiaoId)
        throws NoSuchCongViecBanGiaoException, SystemException {
        return findByPrimaryKey((Serializable) congViecBanGiaoId);
    }

    /**
     * Returns the cong viec ban giao with the primary key or returns <code>null</code> if it could not be found.
     *
     * @param primaryKey the primary key of the cong viec ban giao
     * @return the cong viec ban giao, or <code>null</code> if a cong viec ban giao with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao fetchByPrimaryKey(Serializable primaryKey)
        throws SystemException {
        CongViecBanGiao congViecBanGiao = (CongViecBanGiao) EntityCacheUtil.getResult(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
                CongViecBanGiaoImpl.class, primaryKey);

        if (congViecBanGiao == _nullCongViecBanGiao) {
            return null;
        }

        if (congViecBanGiao == null) {
            Session session = null;

            try {
                session = openSession();

                congViecBanGiao = (CongViecBanGiao) session.get(CongViecBanGiaoImpl.class,
                        primaryKey);

                if (congViecBanGiao != null) {
                    cacheResult(congViecBanGiao);
                } else {
                    EntityCacheUtil.putResult(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
                        CongViecBanGiaoImpl.class, primaryKey,
                        _nullCongViecBanGiao);
                }
            } catch (Exception e) {
                EntityCacheUtil.removeResult(CongViecBanGiaoModelImpl.ENTITY_CACHE_ENABLED,
                    CongViecBanGiaoImpl.class, primaryKey);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return congViecBanGiao;
    }

    /**
     * Returns the cong viec ban giao with the primary key or returns <code>null</code> if it could not be found.
     *
     * @param congViecBanGiaoId the primary key of the cong viec ban giao
     * @return the cong viec ban giao, or <code>null</code> if a cong viec ban giao with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public CongViecBanGiao fetchByPrimaryKey(long congViecBanGiaoId)
        throws SystemException {
        return fetchByPrimaryKey((Serializable) congViecBanGiaoId);
    }

    /**
     * Returns all the cong viec ban giaos.
     *
     * @return the cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<CongViecBanGiao> findAll() throws SystemException {
        return findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the cong viec ban giaos.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link qldc.pm.tiensu.model.impl.CongViecBanGiaoModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param start the lower bound of the range of cong viec ban giaos
     * @param end the upper bound of the range of cong viec ban giaos (not inclusive)
     * @return the range of cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<CongViecBanGiao> findAll(int start, int end)
        throws SystemException {
        return findAll(start, end, null);
    }

    /**
     * Returns an ordered range of all the cong viec ban giaos.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link qldc.pm.tiensu.model.impl.CongViecBanGiaoModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param start the lower bound of the range of cong viec ban giaos
     * @param end the upper bound of the range of cong viec ban giaos (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<CongViecBanGiao> findAll(int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
                (orderByComparator == null)) {
            pagination = false;
            finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL;
            finderArgs = FINDER_ARGS_EMPTY;
        } else {
            finderPath = FINDER_PATH_WITH_PAGINATION_FIND_ALL;
            finderArgs = new Object[] { start, end, orderByComparator };
        }

        List<CongViecBanGiao> list = (List<CongViecBanGiao>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if (list == null) {
            StringBundler query = null;
            String sql = null;

            if (orderByComparator != null) {
                query = new StringBundler(2 +
                        (orderByComparator.getOrderByFields().length * 3));

                query.append(_SQL_SELECT_CONGVIECBANGIAO);

                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);

                sql = query.toString();
            } else {
                sql = _SQL_SELECT_CONGVIECBANGIAO;

                if (pagination) {
                    sql = sql.concat(CongViecBanGiaoModelImpl.ORDER_BY_JPQL);
                }
            }

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                if (!pagination) {
                    list = (List<CongViecBanGiao>) QueryUtil.list(q,
                            getDialect(), start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<CongViecBanGiao>(list);
                } else {
                    list = (List<CongViecBanGiao>) QueryUtil.list(q,
                            getDialect(), start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Removes all the cong viec ban giaos from the database.
     *
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeAll() throws SystemException {
        for (CongViecBanGiao congViecBanGiao : findAll()) {
            remove(congViecBanGiao);
        }
    }

    /**
     * Returns the number of cong viec ban giaos.
     *
     * @return the number of cong viec ban giaos
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countAll() throws SystemException {
        Long count = (Long) FinderCacheUtil.getResult(FINDER_PATH_COUNT_ALL,
                FINDER_ARGS_EMPTY, this);

        if (count == null) {
            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(_SQL_COUNT_CONGVIECBANGIAO);

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(FINDER_PATH_COUNT_ALL,
                    FINDER_ARGS_EMPTY, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_ALL,
                    FINDER_ARGS_EMPTY);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    /**
     * Initializes the cong viec ban giao persistence.
     */
    public void afterPropertiesSet() {
        String[] listenerClassNames = StringUtil.split(GetterUtil.getString(
                    com.liferay.util.service.ServiceProps.get(
                        "value.object.listener.qldc.pm.tiensu.model.CongViecBanGiao")));

        if (listenerClassNames.length > 0) {
            try {
                List<ModelListener<CongViecBanGiao>> listenersList = new ArrayList<ModelListener<CongViecBanGiao>>();

                for (String listenerClassName : listenerClassNames) {
                    listenersList.add((ModelListener<CongViecBanGiao>) InstanceFactory.newInstance(
                            getClassLoader(), listenerClassName));
                }

                listeners = listenersList.toArray(new ModelListener[listenersList.size()]);
            } catch (Exception e) {
                _log.error(e);
            }
        }
    }

    public void destroy() {
        EntityCacheUtil.removeCache(CongViecBanGiaoImpl.class.getName());
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_ENTITY);
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }
}
